#include <iostream>
#include <memory>

class Test
{
public:
    Test()
    {
        std::cout<<"构造函数\n";
    }
    ~Test()
    {
        std::cout<<"析构函数\n";
    }
    void show()
    {
        std::cout<<"123465\n";
    }
};


// template<typename T>
// class SmartPoint
// {
// public:
//     SmartPoint(T *p):p(p){}
//     ~SmartPoint()
//     {
//         delete p;
//     }
// private:
//     T *p;
// };

using IntPtr = std::unique_ptr<int>;

class T
{
public:
    T():a(std::make_unique<int>(10))
    {

    }
private:
    IntPtr a;
};


int main()
{
    // std::unique_ptr<Test> t(new Test);
    // SmartPoint<Test> p(new Test);
    std::unique_ptr<Test> t = std::make_unique<Test>();
    t->show();

    t.get();  //获取裸指针
    //不要去拿裸指针
    //智能指针和裸指针不能混用

    
    return 0;
}